-- 定义一个应用程序公共的Lua对象app_info
local app_info = { version = "1.0" };

-- 增加一个path属性，保存Nginx进程所保存的Lua模块路径，包括conf文件配置的部分路径
app_info.path = package.path;

-- 局部函数，取得最大值
local function max(num1, num2)
    if (num1 > num2) then
        result = num1;
    else
        result = num2;
    end
    return result;
end

-- 打印日志到日志文件
local function log(strs)
    if type(strs) == "string" then
        ngx.log(ngx.DEBUG, strs);
        return ;
    end

    if type(strs) == "table" then
        ngx.log(ngx.DEBUG, table.concat(strs, " "));
        return ;
    end
    ngx.log(ngx.DEBUG, tostring(strs));
end

-- 输出到日志文件
local function error(strs)
    if type(strs) == "string" then
        ngx.log(ngx.ERROR, strs);
        return ;
    end

    if type(strs) == "table" then
        ngx.log(ngx.ERROR, table.concat(strs, " "));
        return ;
    end
    ngx.log(ngx.ERROR, tostring(strs));
end

-- 在屏幕上打印日志
-- ...表示可变参数
local function log_screen(...)
    -- 这里的...和{}中间有空格号，否则会出错
    local args = { ... };
    for i, v in ipairs(args) do
        print("index:", i, " value:", v);
        ngx.say(tostring(v) .. ",");
    end
    ngx.say("<br/>");
end

-- 打印数组
local function _printTable(tab)
    local output = "";
    for i, v in ipairs(tab) do
        ngx.say(v .. "&nbsp;&nbsp;");
    end
    ngx.say("<br/>");
end

-- 获取客户端IP
local function getClientIP()
    local clientIp = ngx.req.get_headers()["X-Real-IP"];
    if clientIp == nil then
        clientIp = ngx.req.get_headers()["x_forwarded_for"];
    end
    if clientIp == nil then
        clientIp = ngx.var.remote_addr;
    end
    return clientIp;
end

-- 统一模块对象
local _Module = {
    app_info = app_info;
    max = max;
    log_screen = log_screen;
    printTable = _printTable;
    log = log;
    getClientIP = getClientIP;
}
return _Module;